/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package LogicaNegocio.Controlador;

import AccesoDatos.Persistencia.Manager.ManagerInformes;
import AccesoDatos.Persistencia.Manager.ManagerLibro;
import GUI.Bibliotecario.AdminLibros.PanelActualizarLibro;
import LogicaNegocio.Biblioteca.Editorial;
import LogicaNegocio.Biblioteca.Libro;
import LogicaNegocio.Validacion.VBiblioteca;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;

/**
 * Esta clase en java permite controlar la actualizacion de libros
 * en el sistema BiblioSoft.
 *
 * @author sebaxtian
 * Archivo: ControlActualizarLibro.java
 * @version 1.0
 * Fecha: lun may 17 19:18:28 COT 2010
 */


public class ControlActualizarLibro {

    //Atributos de clase
    private PanelActualizarLibro panelActualizarLibro;
    private ManagerInformes gestorInformes;
    private ManagerLibro gestorLibro;
    private Date fechaPublicacion;
    private boolean encontrado;

    public ControlActualizarLibro(PanelActualizarLibro panelActualizarLibro) {
        this.panelActualizarLibro = panelActualizarLibro;
        gestorInformes = new ManagerInformes();
        gestorLibro = new ManagerLibro();
        fechaPublicacion = null;
        encontrado = false;
    }

    public void buscar() {
        Libro libro;
        Long isbn = Long.parseLong(panelActualizarLibro.textFieldISBNBuscar.getText());
        libro = gestorLibro.obtenerLibro(isbn);
        if(libro != null){
            panelActualizarLibro.textFieldISBN.setText(libro.getIsbn()+"");
            panelActualizarLibro.textFieldEditorial.setText(libro.getCodigoEditorial()+"");
            Calendar calendario = Calendar.getInstance();
            calendario.setTime(libro.getAnoPublicacion());
            fechaPublicacion = libro.getAnoPublicacion();
            int dia = calendario.get(Calendar.DAY_OF_MONTH);
            int mes = calendario.get(Calendar.MONTH);
            int ano = calendario.get(Calendar.YEAR);
            panelActualizarLibro.textFieldAnoPublicacion.setText(dia+"/"+(mes+1)+"/"+ano);
            panelActualizarLibro.textFieldIdioma.setText(libro.getIdioma());
            panelActualizarLibro.textFieldTitulo.setText(libro.getTitulo());
            panelActualizarLibro.checkActivo.setSelected(libro.getActivo());
        }else{
            JOptionPane.showMessageDialog(panelActualizarLibro, "El Libro con ISBN "+isbn+" no esta registrado", "Buscar Libro", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void actualizar() {
        Libro libro = null;
        try {
            Long isbn = Long.parseLong(panelActualizarLibro.textFieldISBNBuscar.getText());
            libro = gestorLibro.obtenerLibro(isbn);
            if(libro != null){
                int codigoEditorial = Integer.parseInt(panelActualizarLibro.textFieldEditorial.getText());
                String titulo = panelActualizarLibro.textFieldTitulo.getText();
                String idioma = panelActualizarLibro.textFieldIdioma.getText();
                libro.setCodigoEditorial(codigoEditorial);
                libro.setTitulo(titulo);
                libro.setIdioma(idioma);
                libro.setAnoPublicacion(fechaPublicacion);
                libro.setActivo(panelActualizarLibro.checkActivo.isSelected());
                //valida el libro
                new VBiblioteca(libro);
                //se actualiza
                gestorLibro.actualizarLibro(isbn, libro);
                //si no ocurren excepciones
                JOptionPane.showMessageDialog(panelActualizarLibro, "El nuevo libro ha sido actualizado con exito", "Registrar Libro", JOptionPane.PLAIN_MESSAGE);
                limpiar();
            }
        } catch(NumberFormatException ex) {
            JOptionPane.showMessageDialog(panelActualizarLibro, "Debe ingresar un numero codigo de editorial", "Error Codigo", JOptionPane.INFORMATION_MESSAGE);
        } catch (VBiblioteca ex) {
            JOptionPane.showMessageDialog(panelActualizarLibro, ex.getMessage(), "Error Datos", JOptionPane.INFORMATION_MESSAGE);
        }
    }

    public void buscarEditorial() {
        String nombre = panelActualizarLibro.textFieldBuscarEditorial.getText().equals("") ? null : panelActualizarLibro.textFieldBuscarEditorial.getText();
        List<Editorial> listaEditoriales = new ArrayList<Editorial>();
        listaEditoriales = gestorInformes.obtenerEditoriales(nombre);
        if(!listaEditoriales.isEmpty()){
            JOptionPane.showMessageDialog(panelActualizarLibro, "La busqueda SI arrojo resultados", "Buscar", JOptionPane.PLAIN_MESSAGE);
            mostrarEditorialesEncontradas(listaEditoriales);
        }else{
            JOptionPane.showMessageDialog(panelActualizarLibro, "La busqueda NO arrojo resultados", "Buscar", JOptionPane.PLAIN_MESSAGE);
        }
    }

    private void mostrarEditorialesEncontradas(List<Editorial> listaEditoriales) {
        Editorial editorial;
        for(int i = 0; i < listaEditoriales.size(); i++){
            if(panelActualizarLibro.tablaEditorialesBuscadas.getRowCount() <= i){
                DefaultTableModel tmp = (DefaultTableModel)panelActualizarLibro.tablaEditorialesBuscadas.getModel();
                Object fila[] = {"",""};
                tmp.addRow(fila);
            }
            editorial = listaEditoriales.get(i);
            panelActualizarLibro.tablaEditorialesBuscadas.setValueAt(editorial.getCodigoEditorial(), i, 0);
            String nombre = editorial.getNombre();
            panelActualizarLibro.tablaEditorialesBuscadas.setValueAt(nombre, i, 1);
        }
    }

    public void seleccionarEditorial() {
        int fila = panelActualizarLibro.tablaEditorialesBuscadas.getSelectedRow();
        if(fila != -1){
            String codigo = panelActualizarLibro.tablaEditorialesBuscadas.getValueAt(fila, 0).toString();
            panelActualizarLibro.textFieldEditorial.setText(codigo);
        }
    }


    public void seleccionarFecha() {
        int dia, mes, ano;
        dia = panelActualizarLibro.calendario.getDayChooser().getDay();
        mes = panelActualizarLibro.calendario.getMonthChooser().getMonth()+1;
        ano = panelActualizarLibro.calendario.getYearChooser().getYear();
        panelActualizarLibro.textFieldAnoPublicacion.setText(dia+"/"+mes+"/"+ano);
        fechaPublicacion = panelActualizarLibro.calendario.getDate();
    }

    private void limpiar() {
        panelActualizarLibro.textFieldAnoPublicacion.setText("");
        panelActualizarLibro.textFieldBuscarEditorial.setText("");
        panelActualizarLibro.textFieldEditorial.setText("");
        panelActualizarLibro.textFieldISBN.setText("");
        panelActualizarLibro.textFieldIdioma.setText("");
        panelActualizarLibro.textFieldTitulo.setText("");
        panelActualizarLibro.checkActivo.setSelected(false);
        encontrado = false;
    }
}
